/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *Algoritmos y Estructurade Datos
 * 11 de julio del 2013
 * Ejericio No. 1
 *  Clase thelock con los metodos y atributos de un candado
 *  VICTOR FUENTES 12298
 *  SAMANTHA CACTÚN 12382
 *  YUCELY BEB 12537
 */
public  class thelock implements ithelock{
    protected int[] lista; //guarda la contraseña
    protected boolean estado;//true si esta cerrado, false si esta abierto
    protected boolean llave;//true si esta correcto, false si esta incorrecto 
    protected int largo;//el largo de la lista, o sea el largo de la contraseña
    protected int indice;//indice del movimiento en la lista 
    
    // if(Esta<=1079 && Esta>=879){//<>
    
    public thelock(int a){
        largo=a;
        indice=0;
        estado=true;//true de que esta cerrado
        lista=new int[largo];
        llave=true;
    
        
        
    }
    
    public thelock(){
        largo=4;
        lista=new int[largo];
        lista[0]=9;
        lista[1]=0;
        lista[2]=21;
        lista[3]=0;
        
    }
    
    public void ingreso(int i, int c){ //i es el indice al que se agrega la contraseña, y c es el numero de la contraseña 0-25
        if(i<largo){
            if(c>=0 && c<=25){
                lista[i]=c;
            }else
                lista[i]=0;//si los numeros no estan entre 0 y 25, se agregará 0 en la posición
            
        }
        
        
                    
    }
    
    public void press(int a){
        if(llave==true){
            if(a==lista[indice]){
                llave=true;//si esta correcto la llave es true
            }else if(a<0 || a>25){
                llave=false;//si no esta igual o hay error, la llave es false
            }else
                llave=false;
        }
        
        
            
    }
    
    public void lock(){//si el candado esta cerrado(true), lo abre(false)
        if (estado==true){
            estado=false;
        }
    }
    
    public boolean isLocked(){//validacion excesiva 
        
        if(getLlave()==false){
            return true;//retorno de true si esta cerrado
        }else{
            return false;//devuelve false si esta abierto
        }
        
    }
    
    public String toString(){
        //c<=25 && c>=0
        String result="Estado de candado";
        for(int a=0; a<largo; a++ ){
            result+="\n"+lista[a];
        }
        
        return result;
    }
    
    public void setIndice(int in){
        indice=in;
    }
    public void reset(){
        indice=0;
    }
    
    public int getLargo(){
        return largo;
    }
    
    public boolean getLlave(){
        return llave;
    }
    
    public boolean getEstado(){
        return estado;
    }
}
